package utils

import (
	"fmt"
	"math"
)

/**
SlicePage 函数用于计算分页的起始索引和结束索引

参数：
  pageSize: 每页显示的条目数
  page: 当前页码
  total: 总条目数

返回值：
  sliceStart: 当前页的起始索引
  sliceEnd: 当前页的结束索引

注意事项：
  - 如果 page 小于 0，则默认设置为 1
  - 如果 pageSize 小于 0，则默认设置为 10
  - 如果 page 大于总页数，则返回起始索引和结束索引均为 0
  - 如果 sliceEnd 大于 total，则 sliceEnd 设置为 total

*/

func SlicePage(data []map[string]interface{}, pageSize, page, total int) ([]map[string]interface{}, int, error) {
	// 判断形参的合法性
	if page < 0 {
		page = 1
	}
	if pageSize < 0 {
		pageSize = 10
	}

	// 通过总条数和每页显示数计算出总页数
	totalPage := int(math.Ceil(float64(total) / float64(pageSize)))
	if page > totalPage {
		return nil, 0, nil
	}
	// 分页逻辑

	sliceStart := (page - 1) * pageSize
	sliceEnd := sliceStart + pageSize
	if sliceEnd > total { // 防止超出总数范围
		sliceEnd = total
	}
	fmt.Println(sliceStart, sliceEnd)
	// return sliceStart, sliceEnd
	// 返回分页后的数据

	return data[sliceStart:sliceEnd], totalPage, nil
}
